// 宏任务: 同步代码   setTimeout    setInteval  IO事件.....

// 微任务: promise.then()  await的下一行代码

// 同步: 排队走 前一个任务不完事,后面没法执行(阻塞)    异步: 不阻碍任务的执行(非阻塞)
// Event loop 执行顺序 (事件轮询)
// 1. 先执行同步代码
// 2. 执行完所有的同步代码且执行栈为空,判断是否有微任务需要执行
// 3. 执行完所有微任务 且微任务队列为空
// 4. 再去执行setTimeout 等异步延迟的宏任务操作
// 5. 再次执行宏任务

async function async1() {
  console.log('async1 start')
  await async2()
  console.log('async1 end')
}

async function async2() {
  console.log('async2')
}

console.log('script start')

setTimeout(function () {
  console.log('setTimeout')
}, 0)

async1()

new Promise(function (resolve) {
  console.log('promise1')
  resolve('promise1')
}).then(function () {
  console.log('promise2')
})

console.log('script end')

// 1. script start
// 2. async1 start
// 3. async2
// 4. promise1
// 5. script end
// 6. async1 end
// 7. promise2
// 8. setTimeout
